package com.xyoto.community.mapper.love;

import com.xyoto.community.entity.love.DynamicLove;
import com.xyoto.community.entity.main.Dynamic;
import com.xyoto.community.po.DynamicHotNumPO;
import com.xyoto.community.po.DynamicLoveCountPO;
import com.xyoto.community.po.UserDynamicLoveStatusPO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 动态点赞表mapper
 */
public interface DynamicLoveMapper {

    /**
     * 新增动态点赞记录
     *
     * @param dynamicLove
     * @return
     */
    Integer insertOne(DynamicLove dynamicLove);

    /**
     * 根据用户id和动态id查动态点赞记录
     *
     * @param userId
     * @param dynamicId
     * @return
     */
    DynamicLove selectOneByUserIdAndDynamicId(@Param("userId") Integer userId, @Param("dynamicId") Integer dynamicId);

    /**
     * 根据DynamicLove实体类更新数据库动态点赞记录
     * @param dynamicLove
     * @return
     */
    Integer updateDynamicLove(DynamicLove dynamicLove);

    /**
     * 取消动态点赞
     *
     * 可以复用更新动态点赞记录方法updateDynamicLove
     * @param dynamicLove 实体
     * @return
     */
    @Deprecated
    Integer removeDynamicLoveByDynamicId(DynamicLove dynamicLove);

    /**
     * 获取热门动态点赞总数
     * @param list
     * @return
     */
    List<DynamicHotNumPO> getHotDynamicLoveCount(List<DynamicHotNumPO> list);

    /**
     * 根据动态id获取点赞数目
     * @param dynamicId
     * @return
     */
    Integer countDynamicLikeById(Integer dynamicId , Short deleteStatus);

    /**
     * 根据用户id和动态id查动态点赞状态
     *
     * @param userId 用户id
     * @param dynamicId 动态id
     * @return 点赞状态
     */
    Short selectStatusByUserIdAndDynamicId(Integer userId,Integer dynamicId);

    /**
     * 获取用户点赞数目
     * @param dynamicIds 动态id集合
     * @return
     */
    List<DynamicLoveCountPO> getDynamicLoveCount(List<Integer> dynamicIds);

    /**
     * 获取用户对动态的点赞状态
     * @param meId 本人id
     * @param dynamicIds 动态id
     * @return
     */
    List<UserDynamicLoveStatusPO> getUserDynamicLoveStatus(Integer meId, List<Integer> dynamicIds);

    /**
     * 查询指定用户id的所有动态获赞数
     * @param userId
     * @return
     */
    Integer countLoveByUserId(Integer userId);


    List<DynamicLoveCountPO> countAllDynamic(Short status);

    List<DynamicLove> getAll(short loveStatus);
}
